/*
GanttProject is an opensource project management tool. License: GPL2
Copyright (C) 2010 Dmitry Barashev

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
*/
package net.sourceforge.ganttproject.chart.mouse;

import java.awt.event.MouseEvent;

import net.sourceforge.ganttproject.chart.ChartModelBase.ScrollingSession;
import net.sourceforge.ganttproject.gui.scrolling.ScrollingManager;
import net.sourceforge.ganttproject.time.TimeUnit;

public class ScrollViewInteraction extends MouseInteractionBase
        implements MouseInteraction {
//    private final ScrollingManager myScrollingManager;
//    private final TimeUnit myBottomUnit;
//    private int myStartX;
//    private int myStartX2;
    private ScrollingSession myScrollingSession;

    public ScrollViewInteraction(
            MouseEvent e, TimelineFacade timelineFacade, ScrollingManager scrollingManager, TimeUnit bottomUnit) {
        super(timelineFacade.getDateAt(0), timelineFacade);
        myScrollingSession = timelineFacade.createScrollingSession(e.getX());
//        myScrollingManager = scrollingManager;
//        myBottomUnit = bottomUnit;
//        myStartX = e.getX();
//        myStartX2 = e.getX();
    }

//    private TaskLength getScrollIntervalNew(MouseEvent event) {
//        int pixelDiff = event.getX() - myStartX2;
//        Date dateUnderX = getChartDateGrid().getDateAt(pixelDiff);
//        Date startDate = pixelDiff < 0 ? getChartDateGrid().getDateAt(0) : getChartDateGrid().getEndDateAt(0);
//        if (pixelDiff > 0 && dateUnderX.before(startDate)) {
//            dateUnderX = startDate;
//        }
//        return getChartDateGrid().createTimeInterval(
//                getChartDateGrid().getTimeUnitStack().getDefaultTimeUnit(), startDate,dateUnderX);
//        
//    }
    public void apply(MouseEvent event) {
        myScrollingSession.setXpos(event.getX());
//    	//TaskLength scrollInterval = getLengthDiff(event);
//        TaskLength scrollInterval = getScrollIntervalNew(event);
//    	//System.err.println("dateUnderX="+dateUnderX+" startDate="+startDate+" scroll interval=" + scrollInterval);
//    	if (scrollInterval.getLength() == 0) {
//    	    myScrollingManager.scrollBy(event.getX() - myStartX);
//    	    myStartX = event.getX();
//    		return;
//    	}
//    	TimeUnit bottomUnit = myBottomUnit;
//    	if (bottomUnit instanceof TimeUnitFunctionOfDate) {
//    	    bottomUnit = ((TimeUnitFunctionOfDate)bottomUnit).createTimeUnit(getChartDateGrid().getDateAt(event.getX()));
//    	}
//    	if (Math.abs(scrollInterval.getLength(bottomUnit)) >= 1) {
//            myScrollingManager.scrollBy(scrollInterval.reverse());
//            Date newStartDate = getChartDateGrid().getDateAt(event.getX()); 
//            setStartDate(newStartDate);
//            //System.err.println("start date=" + newStartDate);
//            myStartX2 = event.getX();
//    	} else {
//            myScrollingManager.scrollBy(event.getX() - myStartX);
//    	}
//        myStartX = event.getX();            
    }

    public void finish() {
        myScrollingSession.finish();
    }

}